<script>
  async function* fetchCommits(repo) {
    let url = `https://api.github.com/repos/${repo}/commits`;

    while (url) {
      const response = await fetch(url, {
        headers: {'User-Agent': 'Our script'}, // GitHub требует заголовок user-agent
      });

      const body = await response.json(); // ответ в формате JSON (массив коммитов)

      // Ссылка на следующую страницу находится в заголовках, извлекаем её
      let nextPage = response.headers.get('Link').match(/<(.*?)>; rel="next"/);
      nextPage = nextPage && nextPage[1];

      url = nextPage;

      // вернуть коммиты один за другим, до окончания страницы
      for(let commit of body) {
        yield commit;
      }
    }
  }
</script>
